package main

import (
	"fmt"
	"unicode/utf8"
)

//for的使用
func testFor()  {
	str := "abc"
	for pos, s := range str {
		fmt.Println("__", pos, s)
	}
}

//slice使用
func testSlice()  {
	a := []int {1,2,3,4,5}
	s := a[1:3]
	a = append(a, 6)
	s = append(s, 6)
	fmt.Println(a)
	fmt.Println(s)
	var ss = make([]int, 6)
	copy(ss, s)
	fmt.Println(ss)
}

//Q1.2 用 goto 改写 1 的循环。关键字 for 不可使用。
func test1_2(){
	END:
		fmt.Println("end")
		return
	i := 1
	if i == 1 {
		goto END
	}
}

//Q2.1 
/*
1. 解决这个叫做 Fizz-Buzz[23] 的问题：
编写一个程序，打印从 1 到 100 的数字。当是三个়数就打印 “Fizz”
代替数字，当是ࡃ的়数就打印 “Buzz”。当数字同时是三和ࡃ的়数
时，打印 “FizzBuzz”。
 */
func test2_1(){
	for i := 1; i < 101; i++ {

		if i%3==0 && i%5==0 {
			fmt.Println("FizzBuzz")
		}else if i%5==0 {
			fmt.Println("Buzz")
		}else if i%3==0 {
			fmt.Println("Fizz")
		}
	}
}
//Q3.字符串
/*
1. 建立一个 Go 程序打印下面的内容（到 100 个字符）：
A
AA
AAA
AAAA
AAAAA
AAAAAA
AAAAAAA
...
 */
func test3_1()  {
	fmt.Println("test3_1___________")
	//str := [100]string{}
	//for i := 0; i < cap(str); i++  {
	//	str[i] = "A"
	//}
	//for i, j := 1, 1; j < 30;  {
	//	fmt.Println(str[j-i:j])
	//	i = i + 1
	//	j = j + i
	//	fmt.Println("__",i-1,j)
	//}

	str := "A"
	n := 1
	for i := 0; n < 100; i++{
		println(str)
		str = str + "A"
		n = n + i
	}
	fmt.Println(n)

}

/*
2. 建立一个程序统计字符串里的字符数量：
asSASA ddd dsjkdsjs dk
同时输出这个字符串的字节数。 提示： 看看 unicode/utf8 包
 */
func test3_2() {
	fmt.Println("test3_2___________")
	str := "asSASA"
	fmt.Println(len(str), utf8.RuneCount([]byte(str)))
}

/*
接上题替换3至4位置的字符
 */
func test3_3()  {
	fmt.Println("test3_3___________")
	str := "assssa3"
	r := []rune(str)
	//for i, j := 0, len(str) - 1; i < len(str); i++, j--{
	//	r[i], r[j] = r[j], r[i]
	//}
	//
	copy(r[3:5], []rune("ab"))
	fmt.Println(string(r))
}
/*
逆序输出string
*/
func test3_4()  {
	fmt.Println("test3_4___________")
	str := "123456"
	r := []rune(str)
	for i, j := 0, len(str) - 1; i < j;  {
		r[i], r[j] = r[j], r[i]
		i++
		j--
	}
	fmt.Println(string(r))
}


func main(){
	testFor()
	testSlice()
	test1_2()
	test2_1()
	test3_1()
	test3_2()
	test3_3()
	test3_4()
}
